/*
 * Fichier: EasyNote.java
 * Crée le: 16 février 2012.
 * Modifié: 16 février 2012.
 * Auteurs: Sébastien ESTIENNE.
 * SiteWeb: http://www.prog-info.org/
 * 
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

package chapitre13;

import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.swing.JFrame;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;


/**
 * <p>Classe représentant bloc note avec seulement quelques fonctionnalités.</p>
 * TODO : Préfixer de this ?
 * @author Sébastien ESTIENNE.
 */
public class EasyNote extends JFrame {

    /** <p>Serial version UID.</p> */
    private static final long serialVersionUID = 1L;
    
    /** Zone de texte. */
    private JTextArea editeur;
    
    /** Barre de menu. */
    private JMenuBar menu;
    
    /** Menu "Fichier". */
    private JMenu menuFichier;
    
    /** Menu "Edition". */
    private JMenu menuEdition;
    
    /** Sous menu "Insérer". */
    private JMenu menuInserer;
    
    /** Menu "Aide". */
    private JMenu menuAide;
    
    /** Elément de menu "Nouveau" appartenant au menu "Fichier". */
    private JMenuItem eltNouveau;
    
    /** Elément de menu "Quitter" appartenant au menu "Fichier". */
    private JMenuItem eltQuitter;
    
    /** Elément de menu "Sélectionner" appartenant au menu "Edition". */
    private JMenuItem eltSelectionner;
    
    /** Elément de menu "Date" appartenant au sous menu "Insérer". */
    private JMenuItem eltDate;
    
    /** Elément de menu "Heure" appartenant au sous menu "Insérer". */
    private JMenuItem eltHeure;
    
    /** Elément de menu "A propos" appartenant au sous menu "Aide". */
    private JMenuItem eltAPropos;
    
    /**
     * Constructeur s'occupant de l'initialisation de la fenêtre.
     */
    public EasyNote() {
        super("EasyNote");

        // Conteneur.
        Container conteneur = getContentPane();
        
        // Initialisation des menus.
        initMenu();
        
        // Ajout de la zone de texte à la fenêtre.
        editeur = new JTextArea();
        conteneur.add(new JScrollPane(editeur));
        
        // Propriétés de la fenêtre.
        setLocation(50, 50);
        setSize(300, 200);
        setVisible(true);
        setResizable(true);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    }
    
    /**
     * Initialise la barre de menu.
     */
    private void initMenu() {
        // Initialisation des différents menus.
        initMenuFichier();
        initMenuEdition();
        initMenuAide();
        
        // Ajout des menus à la barre de menu.
        menu = new JMenuBar();
        menu.add(menuFichier);
        menu.add(menuEdition);
        menu.add(menuAide);
        
        // Ajout de la barre de menu à la fenêtre.
        setJMenuBar(menu);
    }
    
    /**
     * Initialise le menu "Fichier".
     */
    private void initMenuFichier() {
        // Initialise l'élément "Nouveau".
        eltNouveau = new JMenuItem("Nouveau");
        eltNouveau.setMnemonic('N');
        eltNouveau.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Vide le contenu de la zone de texte.
                editeur.setText("");
            }
        });
        
        // Initialise l'élément "Quitter".
        eltQuitter = new JMenuItem("Quitter");
        eltQuitter.setMnemonic('Q');
        eltQuitter.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Quitte l'application.
                System.exit(0);
            }
        });
        
        // Initialise le menu Fichier.
        menuFichier = new JMenu("Fichier");
        menuFichier.setMnemonic('F');
        menuFichier.add(eltNouveau);
        menuFichier.addSeparator();
        menuFichier.add(eltQuitter);
    }
    
    /**
     * Initialise le menu "Edition".
     */
    private void initMenuEdition() {
        // Initialise l'élément "Sélectionner".
        eltSelectionner = new JMenuItem("Sélectionner tout");
        eltSelectionner.setMnemonic('S');
        eltSelectionner.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Sélectionne tout le texte de la zone.
                editeur.selectAll();
            }
        });
        
        // Initialise l'élément "Date".
        eltDate = new JMenuItem("Date");
        eltDate.setMnemonic('D');
        eltDate.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Récupère la date courante et l'ajoute à la position du curseur.
                Date date = Calendar.getInstance().getTime();
                DateFormat format = new SimpleDateFormat("dd/MM/yyyy");
                editeur.insert(format.format(date), editeur.getCaretPosition());
            }
        });
        
        // Initialise l'élément "Heure".
        eltHeure = new JMenuItem("Heure");
        eltHeure.setMnemonic('H');
        eltHeure.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Récupère l'heure courante et l'ajoute à la position du curseur.
                Date date = Calendar.getInstance().getTime();
                DateFormat format = new SimpleDateFormat("HH:mm:ss");
                editeur.insert(format.format(date), editeur.getCaretPosition());
            }
        });
        
        // Initialise le sous menu "Insérer".
        menuInserer = new JMenu("Insérer");
        menuInserer.setMnemonic('I');
        menuInserer.add(eltDate);
        menuInserer.add(eltHeure);
        
        // Initialise le menu "Edition".
        menuEdition = new JMenu("Edition");
        menuEdition.setMnemonic('E');
        menuEdition.add(eltSelectionner);
        menuEdition.add(menuInserer);
    }
    
    /**
     * Initialise le menu "Aide".
     */
    private void initMenuAide() {
        // Initialise l'élément "A propos".
        eltAPropos = new JMenuItem("A Propos");
        eltAPropos.setMnemonic('P');
        eltAPropos.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // Affiche une boite de dialogue à propos de l'application.
                JOptionPane.showMessageDialog(EasyNote.this, 
                        "EasyNote\nUn éditeur de texte simple.\nVersion 0.1", 
                        "A propos", JOptionPane.INFORMATION_MESSAGE);
            }
        });
        
        // Initialise le menu "Aide".
        menuAide = new JMenu("Aide");
        menuAide.setMnemonic('A');
        menuAide.add(eltAPropos);
    }
    
    /**
     * <p>Débute l'exécution du programme.</p>
     * @param args Les paramètres de la ligne de commande.
     */
    public static void main(String[] args)
    {
       new EasyNote();
    }
}
